package com.poetize.plus.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.poetize.plus.entity.dto.ArticleDTO;
import com.poetize.plus.entity.dto.page.ArticlePageDTO;
import com.poetize.plus.entity.po.Article;
import com.poetize.plus.entity.vo.ArticleVO;
import com.poetize.plus.entity.vo.HomeArticleVO;
import com.poetize.plus.entity.vo.HomeRecommendArticleVO;
import com.poetize.plus.entity.vo.SelectVO;
import com.poetize.plus.entity.vo.page.ArticlePageVO;

import java.util.List;
import java.util.Map;

/**
 * @Author zuosy
 * @Date 2024/3/30 15:31
 **/
public interface ArticleService extends IService<Article> {

    /**
     * 文章分页数据
     * @param articlePageDTO
     * @return
     */
    Page<ArticlePageVO> articlePage(ArticlePageDTO articlePageDTO);

    /**
     * 新增文章信息
     * @param articleDTO
     * @return
     */
    Boolean addArticle(ArticleDTO articleDTO);

    /**
     * 文章详情
     * @param id
     * @return
     */
    ArticleVO queryArticle(Long id);

    /**
     * 修改文章信息
     * @param articleDTO
     * @return
     */
    Boolean updateArticle(ArticleDTO articleDTO);

    /**
     * 删除文章信息
     * @param id
     * @return
     */
    Boolean deleteArticle(Long id);

    /**
     * home页获取文章列表
     * @return
     */
    Map<Long, List<HomeArticleVO>> getHomeArticle();

    /**
     * 获取推荐文章列表
     * @return
     */
    List<HomeRecommendArticleVO> getHomeRecommendArticle();

    /**
     * 文章下拉框
     * @param title
     * @return
     */
    List<SelectVO> getArticleSelect(String title);

    /**
     * 根据ID获取文章详情
     * 此接口与后台管理获取文章详情不同，此接口会计算文章热度等
     * @param id
     * @return
     */
    ArticleVO getArticleById(Long id);

    /**
     * 修改是否可见状态
     * @param id
     * @param status
     * @return
     */
    Boolean changeViewStatus(Long id, Boolean status);

    /**
     * 修改是否开启评论状态
     * @param id
     * @param status
     * @return
     */
    Boolean changeCommentStatus(Long id, Boolean status);

    /**
     * 修改是否推荐状态
     * @param id
     * @param status
     * @return
     */
    Boolean changeRecommendStatus(Long id, Boolean status);

    /**
     * 校验密码
     * @param id
     * @param password
     * @return
     */
    Boolean checkPassword(Long id, String password);
}
